/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package modelo.tableModels;

import modelo.dominio.Credencial;
import modelo.dominio.Establecimiento;
import modelo.dominio.PlanGeneral;
import java.awt.HeadlessException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.event.TableModelEvent;
import javax.swing.table.AbstractTableModel;
/**
 *
 * @author Felipe
 */
public class Planes_TableModel extends AbstractTableModel{
    public static final int ID_INDEX = 0;
    public static final int TITULO_INDEX = 1;
    public static final int OBJETIVO_INDEX = 2;
    public static final int FECHA_INDEX = 3;
    public static final int ESTABLECIMIENTO_INDEX = 4;
    public static final int PROPIETARIO_INDEX = 5;

    protected String[] columnNames = {"ID","TITULO","OBJETIVO","FECHA","ESTABLECIMIENTO","PROPIETARIO"};
    protected List<PlanGeneral> dataVector;

    public Planes_TableModel() {
        dataVector = new ArrayList<PlanGeneral>();
    }

    @Override
    public String getColumnName(int column){
        return columnNames[column];
    }

    @Override
    public boolean isCellEditable(int row,int column){
        if(column == ID_INDEX){
            return false;
        }else{
            return true;
        }
    }

    @Override
    public Class getColumnClass(int column){
        switch(column){
            case ID_INDEX:
                return Integer.class;
            case FECHA_INDEX:
                return Date.class;
            case ESTABLECIMIENTO_INDEX:
                return Establecimiento.class;
            case PROPIETARIO_INDEX:
                return Credencial.class;
            case TITULO_INDEX:
            case OBJETIVO_INDEX:
                return String.class;
            default:
                return Object.class;
        }
    }

    @Override
    public Object getValueAt(int row, int column){
        PlanGeneral planGral = dataVector.get(row);
        switch(column){
            case ID_INDEX:
                return planGral.getId();
            case TITULO_INDEX:
                return planGral.getTitulo();
            case OBJETIVO_INDEX:
                return planGral.getObjetivo();
            case FECHA_INDEX:
                return planGral.getFecha();
            case ESTABLECIMIENTO_INDEX:
                return planGral.getEstablecimiento();
            case PROPIETARIO_INDEX:
                return planGral.getPropietario();
            default:
                return new Object();
        }
    }

    @Override
    public int getRowCount() {
        return dataVector.size();
    }

    @Override
    public int getColumnCount() {
        return columnNames.length;
    }

    @Override
    public void setValueAt(Object value, int row, int column) {
        try {
            PlanGeneral record = (PlanGeneral) dataVector.get(row);
            //JOptionPane.showMessageDialog(null, value.getClass().getName());
            switch (column) {
                case ID_INDEX:
                    record.setId((Integer) value);
                    break;
                case TITULO_INDEX:
                    record.setTitulo((String) value);
                    break;
                case OBJETIVO_INDEX:
                    record.setObjetivo((String) value);
                    break;
                case FECHA_INDEX:
                    record.setFecha((Date) value);
                    break;
                case ESTABLECIMIENTO_INDEX:
                    record.setEstablecimiento((Establecimiento) value);
                    break;
                case PROPIETARIO_INDEX:
                    record.setPropietario((Credencial) value);
                    break;
                default:
                    JOptionPane.showMessageDialog(null, "Indice inválido");
            }
            fireTableCellUpdated(row, column);
        } catch (HeadlessException headlessException) {
            System.out.print(headlessException.getMessage());
        }
    }

    public void addEmptyRow(){
        dataVector.add(new PlanGeneral());
        fireTableRowsInserted(dataVector.size() - 1, dataVector.size()-1);
    }

    public void setData(List<PlanGeneral> planes){
        this.dataVector = planes;
        this.fireTableDataChanged();
    }

    @Override
    public void fireTableDataChanged(){
        this.fireTableChanged(new TableModelEvent(this));
    }

    public List<PlanGeneral> getDatos(){
        return dataVector;
    }
}
